/**
 * harmony.HarmonyTraitement.java
 * @author xavier.miorcec@elomobile.com
 * @11 déc. 2008
 * @ELO_dev_bernardi_200812
 */
package com.elomobile.harmony.traitement;

import java.util.ArrayList;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;

import com.elomobile.harmony.bean.exportPDAD.ExtractionBonTransport;
import com.elomobile.harmony.bean.exportPDAD.LigneBon;
import com.elomobile.harmony.bean.generationElo.BonsTransport;
import com.elomobile.harmony.bean.generationElo.CleHarmony;
import com.elomobile.harmony.bean.generationElo.ExtractionVehiculeVoyage;
import com.elomobile.harmony.bean.generationElo.Vehicule;
import com.elomobile.harmony.dao.RequetesDAO;
import com.elomobile.harmony.utils.LoggerUtils;

public class TraitementEnvoie {

	Logger logger = Logger.getLogger("TraitementEnvoie");
	private boolean initLog = false;
	// Liste des extractions
	private ArrayList<ExtractionVehiculeVoyage> ligneExtractions;
	private ArrayList<Vehicule> listeVoyageVehicule;
	private RequetesDAO requetes;

	protected void initialiseLogger() {
		if (!initLog) {
			PatternLayout pattern = new PatternLayout();
			pattern.setConversionPattern("%d{yyyy-MM-dd HH:mm:ss} [%F:%c{1}:%L] [%-5p] [%t] - %m%n");
			logger = Logger.getLogger("TraitementEnvoie");
			logger.addAppender(LoggerUtils.CreateRollingFileAppenderTraitementEnvoie());
			logger.setLevel(Level.INFO);
			initLog = true;
		}
	}

	/**
	 * Lancement du traitement
	 */
	public void lancerTraitement() {
		initialiseLogger();
		//requetes.razTransfertOK();
		logger.debug("Début de lancement d'un traitement d'extraction des bons de transports");
		ligneExtractions = requetes.recuperationBonTransport(logger);
		if (ligneExtractions != null && ligneExtractions.size() > 0) {
			dispatchLigneExportVersVoyage();
			genererFichierMission();
		}
	}

	/**
	 * Dispatche des enregistrement récupérer via l'odbc
	 */
	protected void dispatchLigneExportVersVoyage() {
		logger.info("Des bons sont en cours de traitement.");
		listeVoyageVehicule = new ArrayList<Vehicule>();
		for (ExtractionVehiculeVoyage vehiculeExt : ligneExtractions) {
			Vehicule vehicule = new Vehicule(this.logger);
			vehicule.setRequetes(requetes);
			vehicule.setCodeDossier(vehiculeExt.getListeLigneVoyage().get(0).getPddos());
			vehicule.setCodeVehiculeHar(String.valueOf(vehiculeExt.getNoVehicule()));
			String bonEnCours = "-1";
			BonsTransport bon = null;
			LigneBon ligneBon = null;
			for (ExtractionBonTransport li : vehiculeExt.getListeLigneVoyage()) {
				bonEnCours = li.getPdnum() + "_" + li.getPdcd();
				if (vehicule.getListeBonsVehicule().containsKey(bonEnCours)) {
					bon = vehicule.getListeBonsVehicule().get(bonEnCours);
				} else {
					bon = new BonsTransport();
					bon.setNumeroBon(bonEnCours);
				}
				ligneBon = new LigneBon();
				ligneBon.setNumeroLigne(Integer.parseInt(li.getPdrep()));
				ligneBon.setLigneExtraction(li);
				bon.getListeLigneBon().put(Integer.parseInt(li.getPdrep()), ligneBon);
				vehicule.getListeBonsVehicule().put(bon.getNumeroBon(), bon);
			}
			vehicule.getListeBonsVehicule().put(bon.getNumeroBon(), bon);
			listeVoyageVehicule.add(vehicule);
		}
	}

	/**
	 * Génération des missions
	 */
	protected void genererFichierMission() {
		for (Vehicule vehicule : listeVoyageVehicule) {
			vehicule.traiterVoyage();
			vehicule.genererFichierXML();
			for (CleHarmony cle : vehicule.getListeCleAUpdater()) {
				getRequetes().majTransfertOK(cle, logger);
			}
		}
	}

	/**
	 * @return the requetes
	 */
	public RequetesDAO getRequetes() {
		return requetes;
	}

	/**
	 * @param requetes the requetes to set
	 */
	public void setRequetes(RequetesDAO requetes) {
		this.requetes = requetes;
	}

}
